package offer.day36;

public class No67StrToInt {
    /*
     * 面试题67：把字符串转换成整数
     * 题目：将一个字符串转换成一个整数，要求不能使用字符串转换为证书的库函数
     * 数字为0或者字符串不是一个合法的数值，则返回0
     *
     * 思路：
     * 需要考虑非法输入和边界值条件
     * 合法输入：
     * 1> 数字
     * 2>+/-数字
     *
     * 非法输入：
     * 1>null
     * 2>字符串为空
     * 3>字符串只有一个符号+/-
     * 4>字符串中由非数字字符
     * 5>字符串超过int所能表示的范围  溢出
     *
     * */
    public static void main(String[] args) {
        No67StrToInt p = new No67StrToInt();
        String s = "+889";
        System.out.println("字符串转为整数：" + p.StrToInt(s));
    }

    private int StrToInt(String s) {
        if (s == null || s .equals("")) return 0;
        int index = 0;
        int result = 0;
        boolean flag = true;
        if (s.charAt(index) == '+' || s.charAt(index) == '-') {
            if (s.charAt(0) == '-')
                flag = false;
            index++;
            if (index == s.length()) return 0;
        }
        for (int i = index; i < s.length(); i++) {
            if (s.charAt(i) < '0' || s.charAt(i) > '9') {
                return 0;
            }
            result *= 10;
            result += s.charAt(i) - '0';

        }
        return result * (flag ? 1 : -1);
    }
}
